{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "166919da-8e13-462a-bf5e-e62b4891bcbc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['sgdclassifier-general', 'facerecognition-general', 'multinomialnb-general', 'randomforestregressor-general', 'perceptron-general', 'svr-general', 'passiveaggressiveclassifier-general', 'sgdregressor-general']\n",
      "/home/tinker/bbserverless/DIC/MachineLearning/Inference-of-ml-kubeless/sgdclassifier-general\n",
      "\n",
      "/home/tinker/bbserverless/DIC/MachineLearning/Inference-of-ml-kubeless/facerecognition-general\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:17:28Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:28Z\" level=info msg=\"Function sgdclassifier-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:28Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls sgdclassifier-general -n kl'\"\n",
      "time=\"2021-11-12T03:17:28Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:28Z\" level=info msg=\"Function facerecognition-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:28Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls facerecognition-general -n kl'\"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "/home/tinker/bbserverless/DIC/MachineLearning/Inference-of-ml-kubeless/multinomialnb-general\n",
      "\n",
      "/home/tinker/bbserverless/DIC/MachineLearning/Inference-of-ml-kubeless/randomforestregressor-general\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:17:28Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:28Z\" level=info msg=\"Function multinomialnb-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:28Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls multinomialnb-general -n kl'\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Function randomforestregressor-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls randomforestregressor-general -n kl'\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Function perceptron-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls perceptron-general -n kl'\"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "/home/tinker/bbserverless/DIC/MachineLearning/Inference-of-ml-kubeless/perceptron-general\n",
      "\n",
      "/home/tinker/bbserverless/DIC/MachineLearning/Inference-of-ml-kubeless/svr-general\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Function svr-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls svr-general -n kl'\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Deploying function...\"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "/home/tinker/bbserverless/DIC/MachineLearning/Inference-of-ml-kubeless/passiveaggressiveclassifier-general\n",
      "\n",
      "/home/tinker/bbserverless/DIC/MachineLearning/Inference-of-ml-kubeless/sgdregressor-general\n",
      "\n",
      "[]\n",
      "[]\n",
      "[]\n",
      "[]\n",
      "[]\n",
      "[]\n",
      "[]\n",
      "[]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Function passiveaggressiveclassifier-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls passiveaggressiveclassifier-general -n kl'\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Function sgdregressor-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls sgdregressor-general -n kl'\"\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "dic = \"/home/tinker/bbserverless/DIC/MachineLearning/Inference-of-ml-kubeless/\"\n",
    "\n",
    "\n",
    "def deploy_ml():\n",
    "    os.chdir(dic)\n",
    "    current_path = os.getcwd()\n",
    "    for root, dirs, files in os.walk(current_path):\n",
    "        print(dirs)\n",
    "        for m in dirs:\n",
    "            p = os.path.join(current_path, m)\n",
    "            print(p)\n",
    "            os.chdir(p)\n",
    "            r = os.popen('bash  invoke.sh').read()\n",
    "            print(r)\n",
    "deploy_ml()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "981840f4-98d7-4aad-8744-6142508392b6",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['cryptography', 'hash', 'Md5', 'sort', 'hello']\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:17:29Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Function cryptography-python submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls cryptography-python -n kl'\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Function hash-python submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls hash-python -n kl'\"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Function md5-python submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls md5-python -n kl'\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Function sort-python submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls sort-python -n kl'\"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Function hello-python submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls hello-python -n kl'\"\n"
     ]
    }
   ],
   "source": [
    "\n",
    "def deploy_web():\n",
    "    dic = \"/home/tinker/bbserverless/DIC/\"\n",
    "    path = os.path.join(\n",
    "        dic, \"WebServices/kubeless/python-code/\")\n",
    "    os.chdir(path)\n",
    "    for root, dirs, files in os.walk(path):\n",
    "        if len(dirs)<2:\n",
    "            continue\n",
    "        print(dirs)\n",
    "        for m in dirs:\n",
    "            os.chdir(os.path.join(path, m))\n",
    "            r= os.popen('bash  invoke.sh').read()\n",
    "            print(r)\n",
    "deploy_web()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "ae2ccba9-87d8-4395-88be-662b56e7aa08",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "def deploy_stream():\n",
    "    dic = \"/home/tinker/bbserverless/DIC/\"\n",
    "    os.chdir(dic)\n",
    "    current_path = os.getcwd()\n",
    "    shell_path = os.path.join(current_path, \"Stream/kubeless/\")\n",
    "    os.chdir(shell_path)\n",
    "    os.popen('bash  invoke.sh').read()\n",
    "\n",
    "\n",
    "def deploy_bigdata():\n",
    "    dic = \"/home/tinker/bbserverless/DIC/\"\n",
    "    os.chdir(dic)\n",
    "    current_path = os.getcwd()\n",
    "    shell_path = os.path.join(current_path, \"BigData/kubeless/\")\n",
    "    os.chdir(shell_path)\n",
    "    r = os.popen('bash  invoke.sh').read()\n",
    "    print(r)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "706ebef7-8384-40be-badd-d307e78941c4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Function bigdata submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:30Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls bigdata -n kl'\"\n",
      "time=\"2021-11-12T03:17:31Z\" level=info msg=\"Deploying function...\"\n",
      "time=\"2021-11-12T03:17:31Z\" level=info msg=\"Function stream submitted for deployment\"\n",
      "time=\"2021-11-12T03:17:31Z\" level=info msg=\"Check the deployment status executing 'kubeless function ls stream -n kl'\"\n"
     ]
    }
   ],
   "source": [
    "deploy_bigdata()\n",
    "deploy_stream()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "3f9576ec-5421-47bf-80b3-b67cb76444e0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NAME                                                  READY   STATUS         RESTARTS   AGE\n",
      "bigdata-694fd68bf6-27msm                              1/1     Running        0          66s\n",
      "cryptography-python-77c858f5cc-9p9n4                  0/1     Init:1/2       0          68s\n",
      "facerecognition-general-78678cb9f8-twbll              1/1     Running        0          70s\n",
      "hash-python-75845f8cb4-brdlt                          1/1     Running        0          68s\n",
      "hello-python-797757f4bf-fkxzd                         0/1     ErrImagePull   0          67s\n",
      "md5-python-6b49f94ccc-tqzlw                           1/1     Running        0          67s\n",
      "multinomialnb-general-68889598d4-cksxl                1/1     Running        0          69s\n",
      "passiveaggressiveclassifier-general-f8677454b-wzj9f   1/1     Running        0          69s\n",
      "perceptron-general-6c4fb89bb8-trlm2                   1/1     Running        0          69s\n",
      "randomforestregressor-general-5bc9596f6b-479pz        1/1     Running        0          69s\n",
      "sgdclassifier-general-548d7b9648-bngxb                1/1     Running        0          70s\n",
      "sgdregressor-general-65b8bb849b-6bljx                 1/1     Running        0          68s\n",
      "sort-python-569c48c8d-4dr47                           1/1     Running        0          67s\n",
      "stream-588ff8bd9-7clc2                                1/1     Running        0          66s\n",
      "svr-general-65f46d896-xfv48                           1/1     Running        0          69s\n"
     ]
    }
   ],
   "source": [
    "!kubectl get pod -n kl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "b8179b05-e5fe-4d13-b1f0-0a8e9f12d843",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Autoscaling rule for hello-python submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Autoscaling rule for hash-python submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Autoscaling rule for cryptography-python submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Autoscaling rule for md5-python submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Autoscaling rule for sort-python submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:14Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Autoscaling rule for facerecognition-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Autoscaling rule for multinomialnb-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Autoscaling rule for passiveaggressiveclassifier-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Autoscaling rule for perceptron-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Autoscaling rule for randomforestregressor-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Autoscaling rule for sgdclassifier-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Autoscaling rule for sgdregressor-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Autoscaling rule for svr-general submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Autoscaling rule for bigdata submitted for deployment\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Adding autoscaling rule to the function...\"\n",
      "time=\"2021-11-12T03:19:15Z\" level=info msg=\"Autoscaling rule for stream submitted for deployment\"\n"
     ]
    }
   ],
   "source": [
    "action_names = ['hello-python', 'hash-python', 'cryptography-python', 'md5-python', 'sort-python', 'facerecognition-general', 'multinomialnb-general',\n",
    "                'passiveaggressiveclassifier-general', 'perceptron-general', 'randomforestregressor-general', 'sgdclassifier-general', 'sgdregressor-general', 'svr-general', 'bigdata', 'stream']\n",
    "for i in action_names:\n",
    "    cmd = 'kubeless autoscale create --max 64 --value 40  -n kl  {function}'\n",
    "    os.system(cmd.format(function=i))\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "5a018ce9",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from hello-python successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from hash-python successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from cryptography-python successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from md5-python successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from sort-python successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from facerecognition-general successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from multinomialnb-general successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from passiveaggressiveclassifier-general successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from perceptron-general successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from randomforestregressor-general successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from sgdclassifier-general successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from sgdregressor-general successfully\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:13Z\" level=info msg=\"Remove Autoscaling rule from svr-general successfully\"\n",
      "time=\"2021-11-12T03:18:14Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:14Z\" level=info msg=\"Remove Autoscaling rule from bigdata successfully\"\n",
      "time=\"2021-11-12T03:18:14Z\" level=info msg=\"Removing autoscaling rule from the function...\"\n",
      "time=\"2021-11-12T03:18:14Z\" level=info msg=\"Remove Autoscaling rule from stream successfully\"\n"
     ]
    }
   ],
   "source": [
    "action_names = ['hello-python', 'hash-python', 'cryptography-python', 'md5-python', 'sort-python', 'facerecognition-general', 'multinomialnb-general',\n",
    "                'passiveaggressiveclassifier-general', 'perceptron-general', 'randomforestregressor-general', 'sgdclassifier-general', 'sgdregressor-general', 'svr-general', 'bigdata', 'stream']\n",
    "for i in action_names:\n",
    "    cmd = 'kubeless autoscale delete -n kl  {function}'\n",
    "    os.system(cmd.format(function=i))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "time=\"2021-11-12T03:16:47Z\" level=fatal msg=\"functions.kubeless.io \\\"hello-python\\\" not found\"\n",
      "time=\"2021-11-12T03:16:47Z\" level=fatal msg=\"functions.kubeless.io \\\"hash-python\\\" not found\"\n",
      "time=\"2021-11-12T03:16:47Z\" level=fatal msg=\"functions.kubeless.io \\\"cryptography-python\\\" not found\"\n"
     ]
    }
   ],
   "source": [
    "action_names = ['hello-python', 'hash-python', 'cryptography-python', 'md5-python', 'sort-python', 'facerecognition-general', 'multinomialnb-general',\n",
    "                'passiveaggressiveclassifier-general', 'perceptron-general', 'randomforestregressor-general', 'sgdclassifier-general', 'sgdregressor-general', 'svr-general', 'bigdata', 'stream']\n",
    "for i in action_names:\n",
    "    cmd = 'kubeless function delete {function} -n kl'\n",
    "    os.system(cmd.format(function=i))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "!kubeless function delete bigdata -n kl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "9aab921455daf93c5b5e512768862be38eb2d6dcc418fdb7d8b034605503ac32"
  },
  "kernelspec": {
   "display_name": "Python 3.8.8 64-bit ('base': conda)",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
